perm filename LOOP2.F4[P11,LCS] blob
sn#592321 filedate 1981-06-03 generic text, type T, neo UTF8
C**** LOOP2.F4 *********
C*** LOOP, SORT2, CODN, NALF, BAUTO, FINDIT, MVBEAM, MVBX
C*** JUGGLE, LTLLUP, XNOTE, UPDATE, NEWR, MSSLUP, RNX, LUP2
C*** RJED, RJED2, EDX, EQUAL, BOXX
C*** PARCH, RCURVE
SUBROUTINE LOOP(I,J,K,L,M,N)
DIMENSION N(1)
MM=M-L
II=I+L
JJ=J+L
DO 1 NN=I+L,J+L,K
1 N(NN)=N(NN+MM)
CLOOP: 0 ; DO 1 NN=I+L,J+L,K
C MOVE 1,@4(16)
C SUB 1,@3(16) ; MM IS IN 1
C MOVE 2,@(16)
C ADD 2,@3(16) ;I+L -- NN, 1ST TIME
C MOVE 3,@1(16)
C ADD 3,@3(16) ;J+L
C HRRZI 5,@5(16) ; ADR. OF N
C ADDI 2,-1(5) ; N(II) START
C ADDI 3,-1(5) ; N(JJ) FINISH
C MOVE 4,@2(16) ;K
C JUMPL 4,LP3 ; JUMP IF NEG. INCR.
C HRRM 1,.+1 ; ADD IN MM TO (2) AT LP1+1
CLP1: MOVE 6,(2)
C MOVEM 6,(2) ;N(NN)=N(NN+MM)
C CAIGE 2,(3)
C AOJA 2,LP1
C JRA 16,6(16)
CLP3: HRRM 1,.+1 ; ADD IN MM TO (2) AT LP2+1
CLP2: MOVE 6,(2) ;NEG. INCR.
C MOVEM 6,(2)
C CAILE 2,(3)
C SOJA 2,LP2
C JRA 16,6(16) ; END
END
SUBROUTINE SORT2(RPOS,M)
DIMENSION RPOS(2,200)
L=2
3 J=-1
RX=RPOS(1,L-1)
DO 2 K=L,M
IF(RPOS(1,K).GE.RX)GO TO 2
RX=RPOS(1,K)
J=K
2 CONTINUE
IF(J.LT.0)GO TO 4
K=L-1
N=0
1 N=N+1
X=RPOS(N,K)
RPOS(N,K)=RPOS(N,J)
RPOS(N,J)=X
IF(N.EQ.1)GO TO 1
C CALL EXCH(RPOS(1,K),RPOS(1,J))
C CALL EXCH(RPOS(2,K),RPOS(2,J))
4 L=L+1
IF(L.LE.M)GO TO 3
END
FUNCTION CODN(K,N)
COMMON /PTR/KWDS(1) /XRN/RN(1)
C GET CODE NUMBER AND RETURN POINTER
N=KWDS(K)
CODN=RN(N+1)
END
FUNCTION NALF(I)
C CHANGE ASCII TO INTEGER
IF(I.GE.0)GO TO 20
J='A'
M=-1
GO TO 10
20 J=' '
M=16
10 NALF=(I-J)/536870912-M
END
SUBROUTINE BAUTO(J,L,K,N)
C FOR AUTOMATIC BEAMS.
COMMON /SC/JS,LS,MK,ISKP,XMINUS,NS,IEXP,LK,NNUM,JJ,JN,DBST
1,NFLG,JXX,ISEMX,JG,VX(1)
J=J+2
VX(J-1)=L-N
C**** A LIMIT OF 25 BEAMS PER LINE. ??
VX(J)=K-N
END
FUNCTION FINDIT(N)
COMMON R2
COMMON /XRN/RN(1) /PTR/KWDS(1) /LIMIT/LIMIT,ITEM,L,I,IX
FINDIT=0
L=KWDS(N)
IF(RN(L+1).NE.1)GO TO 377
IF(RN(L+2).EQ.R2)RETURN
C SENDS BACK A NUM IN L
377 FINDIT=-1
END
C THESE MOVE ENDS OF PARTIAL INNER BEAMS.
SUBROUTINE MVBEAM(R,I,JY,L,W)
C L AND JY ARE FOR MOVES TO DIFF. STAFF.
DIMENSION R(1)
R(L+I)=R(JY+I)+W
END
SUBROUTINE MVBX(I)
COMMON R2,JA,CENTR,J2,RJQ(20),L,RDIS /KJY/K,JY/XRN/R(1)
EQUIVALENCE (R4,RJQ(2)),(R8,RJQ(6))
R(L+I)=R8+(R(JY+I)-R4)*RDIS
END
SUBROUTINE JUGGLE
IMPLICIT INTEGER(A-Z)
REAL RN
COMMON /DL/X22,SAVER,NAME /XRN/RN(1) /PTR/PWDS(1)
COMMON /LIMIT/LIMIT,ITEM,L,I,IX/DPY/ST(4000),MEDIT,IGO
1 /DPTR/WDS(1)
ITEM=ITEM-1
JX=RN(MEDIT)+3
C WD CNT OF OLD ITEM
C I-IX IS WD CNT OF NEW ITEM
JY=IX
Z=I-IX-JX
C SPACE CHANGE
JX22=X22+1
IF(Z)2751,172,751
751 CALL LOOP(I-1,MEDIT+JX,-1,Z,0,RN)
JY=IX+Z
GO TO 172
2751 CALL LOOP(MEDIT+JX+Z,IX+Z-1,1,0,-Z,RN)
172 J=RN(JY)+2
CALL LOOP(0,J,1,MEDIT,JY,RN)
I=IX+Z
1751 X=ITEM+1
JX=WDS(JX22)-WDS(X22)
J=WDS(X+1)-WDS(X)
Y=J-JX
JX=WDS(X)+Y+1
IF(Y)2851,182,282
282 CALL LOOP(WDS(X+1)+2,WDS(X22),-1,Y,0,ST)
GO TO 182
2851 CALL LOOP(WDS(JX22)+Y+1,WDS(X)+Y+1,1,0,-Y,ST)
JX=WDS(X)+1
182 CALL LOOP(1,J,1,WDS(X22)+1,JX,ST)
IF(Z.NE.0)CALL LTLLUP(PWDS,Z,JX22,X)
IF(Y.NE.0)CALL LTLLUP(WDS,Y,JX22,X)
C UPDATE PWDS AND WDS
ST(2)=WDS(X)
X22=0
END
SUBROUTINE LTLLUP(J,K,L,M)
DIMENSION J(1)
DO 1 N=L,M
1 J(N)=J(N)+K
END
FUNCTION XNOTE(J)
COMMON/XRN/RN(1) /SCM/V(78),ISCR,LCNT,RSTF
1 /RINP/R(10,80),RPOS(2,50),RI(200)
1 /POSI/STFF(0/7),JJ2,IPOS /STF/RSTFAC(0/7),RSTJ2
XNOTE=AMOD(R(4,J),100.)
IF(XNOTE.GE.80)XNOTE=XNOTE-100
C FOR NEG. MINIS, ETC.
A=R(10,J)
IF(A.EQ.0)RETURN
L=RSTF
B=RSTFAC(L)
K=1
IF(A.EQ.2.)K=-1
C THIS STAFF POS.
XNOTE=XNOTE+(STFF(L)-STFF(L+K))/(-7.*B)
END
C CALLED FROM SLURZ, NEWR
SUBROUTINE UPDATE(I)
COMMON /LIMIT/LIMIT,ITEM,LL,IS /XRN/RN(1)
RN(IS)=I
IS=IS+I+3
END
C CALLED FROM SLURZ, SCMSS
SUBROUTINE NEWR
COMMON/PTR/PWDS(1)/LIMIT/LIMIT,ITEM,LL,IS,IX
COMMON/XRN/RN(1) /SCM/V(78),I,LCNT,STAFF,LIST(200),REND
COMMON/SCX/JALPHA(30),JX,U,JZ,IRHY,J4,KA,KB,IZ
1 /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG
1 ,IXX,ISEMI,IQT,VX(50),IAMP,KQ,KN,M,MODE,IBLA
1 /RINP/R(10,80),RPOS(2,50),RI(200)
IF(MODE.NE.1)GO TO 1
IK=IS
JIT=ITEM
1 IS=IK
ITEM=JIT+1
C MODE 1=NOTE, 2=RHYTH, 3=ACCENTS, 4=BEAMS, 5=SLURS.
C SKIPS INVIS RESTS - ONLY NEEDED IN RHYTH.
C JUMP FOR BEAM CONT.
K=1
2 IEND=-1
X=R(1,K)
IF(X.EQ.1.)GO TO 11
IF(X.NE.2.)GO TO 12
IF(R(6,K).GE.0)GO TO 12
IF(R(7,K).EQ.0)GO TO 32
C DELETE IF INVIS. REST AND NO RHYTHMIC VALUE.)
GO TO 12
11 IEND=0
12 RN(IS+3)=0
RN(IS+2)=0
C ↑↑↑↑ TO CLEAR ARRAY FOR SHORT ITEMS (CLEFS)
LK=10
IF(MODE.GT.3)LK=8
C ONLY LOOK AT 8 PARAMS AFTER MODE 3.
DO 3 L=LK,1,-1
A=R(L,K)
IF(IEND.GE.0)GO TO 14
IF(A.EQ.0)GO TO 3
IEND=L
14 RN(IS+L)=A
3 CONTINUE
13 RN(IS+2)=STAFF
IF(X.NE.1)GO TO 4
IEND=11
RN(IS+11)=R(2,K)
C GET P11 VALUE
4 IF(IEND.LT.3)IEND=3
IF(X.NE.1.)GO TO 34
IF(MODE.NE.3)GO TO 34
X=IS+11
R(9,K)=X
34 CALL UPDATE(IEND-2)
32 IF(K.GE.IZ)RETURN
K=K+1
GO TO 2
END
SUBROUTINE MSSLUP
COMMON /KNT/KNT /RRJJ/RJJ2,RJJ(20)
COMMON R2,JA,CENTR,J2,RJQ(20)
KNT=1
DO 5543 K=1,10
RA=RJQ(K)
IF(RA.NE.0)KNT=K
5543 RJJ(K)=RA
END
C ******* WILL SAVE UP TO PARAM 12 ONLY!
C*** CALLED FROM SLURZ
SUBROUTINE RNX(A,B,C,D,E,F,G,H,RI)
COMMON /XRN/RN(1) /LIMIT/LIMIT,ITEM,LL,I
RN(I)=A
RN(I+1)=B
RN(I+2)=C
RN(I+3)=D
RN(I+4)=E
RN(I+5)=F
RN(I+6)=G
RN(I+7)=H
RN(I+8)=RI
END
C*** CALLED FROM MAIN.
SUBROUTINE LUP2
COMMON R2,JA,CENTR,J2,RJQ(20)/LIMIT/LIM,ITEM,LL,I
1 /KNT/KNT /XRN/RN(1)
RN(I)=KNT
RN(I+1)=JA
I=I+2
RN(I)=R2
DO 4554 K=1,KNT
4554 RN(I+K)=RJQ(K)
I=I+KNT+1
END
C*** CALLED FROM RJED AND MAIN.
SUBROUTINE PARCH(JA,JJA,RD)
COMMON /RRJJ/RRJJ
IF(JA.EQ.2)GO TO 1
IF(JA.NE.1)RETURN
IF(RD.EQ.0)RETURN
IF(RD.LE.18.)JJA=RD
RETURN
1 IF(RD.LE.7.)RRJJ=RD
END
C*** CALLED FROM SLURZ AND MAIN.
FUNCTION RCURVE(R)
DIMENSION R(1)
C R(1) IS R3 WHEN CALL IS FROM MAIN.
A=R(6)+1.
B=R(4)-R(1)
IF(A.GE.0)GO TO 1
B=B+A+A
1 B=B/25.
RCURVE=ABS(R(3)-R(2))/10.+B+.9
IF(R(5).LT.0)RCURVE=-RCURVE
END
SUBROUTINE RJED
COMMON R2,JA,CENTR,JJ2,RJQ(20),JQ(20)
1 /RRJJ/RJJ2,RJJ(20),JJA
DO 1222 K=1,20,2
L=JQ(K)
IF(L.EQ.0)RETURN
C '600 2' WILL ADD 2 TO PARAM 6. '3000 6' SETS P3=P6.
RD=RJQ(K+1)
M=L
IF(L.LT.100)GO TO 223
IF(L.LT.2000)GO TO 5223
M=L/1000
L=JQ(K+1)-2
RD=RJJ(L)
GO TO 2223
5223 M=L/100
IF(M.EQ.2)GO TO 1223
RD=RJJ(M-2)+RD
GO TO 2223
1223 RD=RJJ2+RD
223 IF(M.LE.2)GO TO 3223
2223 RJJ(M-2)=RD
GO TO 1222
3223 CALL PARCH(M,JJA,RD)
C NOW P1 CAN BE CHANGED IN EDIT MODE -- BE CAREFUL,,,,!!!!!!
1222 CONTINUE
CC ** LOOP SET TO 20(20 IN ARRAY!) ONLY 13 PARAMS POSSIBLE NOW.
END
SUBROUTINE RJED2
COMMON R2,JA,CENTR,JJ2,RJQ(20),JQ(20)
1 /RRJJ/RJJ2,RJJ(20),JJA /LIMIT/LIMIT,ITEM,LL,I
DO 5514 K=1,11
R2=RJJ(K)
RJQ(K)=R2
5514 JQ(K)=R2
R2=RJJ2
JA=JJA
ITEM=ITEM-1
IF(ITEM.LT.0)ITEM=0
END
FUNCTION EDX(RLINE)
COMMON R2,JA /LIMIT/LIM,ITEM,L,I,IX
1 /JCHAR/IXX,ISEMI,IBLA,IG,JED,KED,REDIT,RITEM
1 /XRN/RN(1) /DL/JX22 /PTR/KWDS(1)
EDX=0
244 JX=ITEM
IF(JED.GT.JX)GO TO 444
AC5=RITEM
JAC7=0
C FLAG FOR '33' FEATURE
IF(AC5.EQ.33.)GO TO 2
IF(AC5.NE.44.)GO TO 1
C IF CODE NUM 33 = NON-CLEF ITEMS IN CODE 3
C USE 44 FOR NON-BARLINES IN CODE 4
2 JAC7=-1
AC5=AC5/11.
C CHANGE 33,44 BACK TO 3,4
C UNDER CODE 3 EXCEPT P5=0,1,2,3,4,5 (REAL CLEFS)
1 DO 144 K=JED,JX
L=KWDS(K)
IF(KED.EQ.-2)GO TO 654
C -2 LOOKS AT ALL ITEMS NEAR VERT. LINE, -1 ON SINGLE STAFF.
IF(KED.EQ.2)GO TO 656
IF(RN(L+2).NE.REDIT)GO TO 144
IF(KED.LT.0)GO TO 654
IF(AC5.EQ.0)GO TO 655
656 IF(AC5.NE.RN(L+1))GO TO 144
IF(JAC7.EQ.0)GO TO 655
C SKIP NEXT UNLESS '33,44' FLAG IS SET (JAC7=-1)
IF(RN(L).LE.2.)GO TO 144
C (TREBLE CLEF)
IF(AC5.EQ.4)GO TO 655
C JUMP IF WDCNT OF CODE 4 .GT.2
IF(RN(L+5).LE.5)GO TO 144
C (SOME REAL CLEF)
655 IF(JA.NE.55)GO TO 344
654 IF(ABS(RLINE-RN(L+3)).GE.5.0)GO TO 144
C FINDS THINGS UP TO 5 STEPS ON EITHER SIDE OF VERTICAL LINE.
IF(AC5.EQ.0)GO TO 1114
C IF 0, ANY CODE NUM. WILL DO
IF(AC5.NE.RN(L+1))GO TO 144
C IS IT THE RIGHT CODE NUM?
1114 IF(REDIT.GT.7.)GO TO 344
C STAFF NUM .GT. 7?
IF(REDIT.EQ.RN(L+2))GO TO 344
C OR IS IT SPECIFICALLY THE RIGHT STAFF NUM?
144 CONTINUE
444 REDIT=999.
R2=0
C SO IT WILL RETURN IF NOTHING IS FOUND WITH 'ED' OR 'ST'.
RETURN
344 JX22=K
JED=K+1
C FOR NEXT TIME AROUND
EDX=-1.
C AC0=-1=GO TO 429, =>0=GO TO 73
END
SUBROUTINE EQUAL(X)
COMMON R2,JA /RRJJ/RJJ2,RJJ(20)
IF(JA.LE.13)GO TO 324
JA=JA/10
C ADD 1000 TO PARAM TO MAKE EQUAL TO ANOTHER PARAM
N=R2-2
RJJ(JA-2)=RJJ(N)
RETURN
324 N=JA-2
IF(X.LT.0)GO TO 224
RJJ(N)=R2
RETURN
224 RJJ(N)=RJJ(N)+R2
END
SUBROUTINE BOXX
C*** USED IN MAIN. -- WHILE EDITING.
COMMON R2,JA /LIMIT/LIM,ITEM,L,I,IX
1 /JCHAR/IXX,ISEMI,IBLA,IG,JED,KED,REDIT,RITEM
1 /XRN/RN(1) /DL/JX22 /PTR/KWDS(1) /DPY/ID(4000),MEDIT,IGO
COMMON /RRJJ/RJJ2,RJJ(20),JJA /DPTR/JWDS(1)
1 /YED/JYED,IBOX,RBOX
429 IX=I
MEDIT=KWDS(JX22)
JY=RN(MEDIT)+2
CALL LOOP(0,JY,1,I,MEDIT,RN)
JJA=RN(I+1)
JYED=JY-2
L=I+2
DO 422 K=1,11
IF(K.GT.JYED)GO TO 423
RJJ(K)=RN(L+K)
GO TO 422
423 RJJ(K)=0
422 CONTINUE
RJJ2=RN(L)
IF(IGO.GT.0)GO TO 4231
C NO BOX WHEN IN GROUP EDIT ROUTINE
RBOX=RJJ2
IBOX=I
CALL BOX(IBOX,RBOX)
4231 ITEM=ITEM+1
CC MOVE DPTR-1(1) ; ST2=WDS(ITEM)
END